﻿using BLL.Utility;
using Entity.Context;
using Entity.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace BLL.Sgf
{
    public sealed class UsuarioBLL : AbstractClass
    {

        #region -- SalvarUsuario --
        public void SalvarUsuario(Usuario pEntity)
        {
            try
            {
                using (var ctx = new Context())
                {
                    var entity = BuscaUsuarioId(pEntity.Id);
                    if (entity != null) return;
                    ctx.Usuario.Add(pEntity);
                    ctx.SaveChanges();
                }
            }
            catch (Exception ex)
            {
                throw new Exception("ClassUsuario.SalvarUsuario :: " + ex.Message, ex);
            }

        }
        #endregion

        #region -- ValidaAcesso --
        public bool ValidaAcesso(Usuario pEntity)
        {
            try
            {
                using (var ctx = new Context())
                {
                    return (from c in ctx.Usuario
                            where c.NomeUsuario.Equals(pEntity.NomeUsuario) &&
                            c.SenhaUsuario.Equals(pEntity.SenhaUsuario)
                            select c).Any();
                }
            }
            catch (Exception ex)
            {
                throw new Exception("UsuarioBLL.GetUsuario :: " + ex.Message, ex);
            }
        }
        #endregion

        #region -- ValidaCadastro --
        public Usuario ValidaCadastro(Usuario pEntity)
        {
            try
            {
                using (var ctx = new Context())
                {
                    return (from c in ctx.Usuario
                            where c.NomeUsuario.Equals(pEntity.NomeUsuario)
                            select c).FirstOrDefault();
                }
            }
            catch (Exception ex)
            {
                throw new Exception("UsuarioBLL.ValidaCadastro :: " + ex.Message, ex);
            }
        }
        #endregion

        #region -- BuscaUsuarioId --
        public Usuario BuscaUsuarioId(int pId)
        {
            try
            {
                using (var ctx = new Context())
                {
                    return (from c in ctx.Usuario
                            where c.Id == pId
                            select c).FirstOrDefault();
                }
            }
            catch (Exception ex)
            {
                throw new Exception("ClasUsuario.GetusuarioId :: " + ex.Message, ex);
            }
        }
        #endregion

        #region -- BuscaUsuario --
        public Usuario BuscaUsuario(Usuario pUsuario)
        {
            try
            {
                using (var ctx = new Context())
                {
                    return (from c in ctx.Usuario
                        where c.NomeUsuario.Equals(pUsuario.NomeUsuario) && c.SenhaUsuario.Equals(pUsuario.SenhaUsuario)
                        select c).FirstOrDefault();
                }
            }
            catch (Exception ex)
            {
                throw new Exception("UsuarioBLL.BuscaUsuario :: " + ex.Message, ex);
            }
        }
        #endregion

    }
}
